package com.cw.jeeyt.dao.intf.api;

import java.util.List;

import com.cw.jeeyt.common.Order;
import com.cw.jeeyt.dao.model.api.ApiFacadeModuleInfoDo;
import com.cw.lang.mybatis.dto.PageInfo;

/**
 * api接口文档所在项目模块 dao数据库操作接口
 *
 * @author chenw
 * @version 1.0.0
 */
public interface ApiFacadeModuleInfoDao {
    /**
     * 新增api接口文档所在项目模块
     *
     * @param apiFacadeModuleInfo
     * @return 整数
     */
    Integer insert(ApiFacadeModuleInfoDo apiFacadeModuleInfo);

    /**
     * 新增api接口文档所在项目模块不为空的字段
     *
     * @param apiFacadeModuleInfo
     * @return 整数
     */
    Integer insertSelective(ApiFacadeModuleInfoDo apiFacadeModuleInfo);

    /**
     * 删除api接口文档所在项目模块
     *
     * @param apiFacadeModuleInfo
     */
    void delete(ApiFacadeModuleInfoDo apiFacadeModuleInfo);

    /**
     * 修改api接口文档所在项目模块不为null的字段
     *
     * @param apiFacadeModuleInfo
     */
    void updateSelective(ApiFacadeModuleInfoDo apiFacadeModuleInfo);

    /**
     * 修改api接口文档所在项目模块
     *
     * @param apiFacadeModuleInfo
     */
    void update(ApiFacadeModuleInfoDo apiFacadeModuleInfo);

    /**
     * 根据主键查询api接口文档所在项目模块
     *
     * @return api接口文档所在项目模块
     */
    ApiFacadeModuleInfoDo getById(Long id);

    /**
     * 查询所有api接口文档所在项目模块
     *
     * @return api接口文档所在项目模块集合
     */
    List<ApiFacadeModuleInfoDo> queryApiFacadeModuleInfoList();

    /**
     * 分页查询api接口文档所在项目模块
     *
     * @param apiFacadeModuleInfo 查询条件
     * @param startRow 开始条数
     * @param pageSize 每页长度
     * @return api接口文档所在项目模块集合
     */
    PageInfo<ApiFacadeModuleInfoDo> queryByPage(ApiFacadeModuleInfoDo apiFacadeModuleInfo, Integer startRow,
        Integer pageSize, Order order);

    /**
     * 检查当前项目下模块是否已存在
     *
     * @param projectId
     * @param moduleCode
     * @return
     * @throws Exception
     */
    ApiFacadeModuleInfoDo queryByProjectIdAndModuleCode(Long projectId, String moduleCode);

    /**
     * 根据项目id查询模块信息
     *
     * @param projectId
     * @return
     * @throws Exception
     */
    List<ApiFacadeModuleInfoDo> queryListByProjectId(Long projectId);

    /**
     * 根据模块编码查询模块信息
     *
     * @param moduleCodes
     * @return
     * @throws Exception
     */
    List<ApiFacadeModuleInfoDo> queryListByModuleCodes(List<String> moduleCodes);

    /**
     * 批量新增api接口文档所在项目模块
     *
     * @param moduleInfoList
     * @return 整数
     */
    Integer insertBat(List<ApiFacadeModuleInfoDo> moduleInfoList);

}
